//021. 亲和数
//        令 d(n)表示自然数 n 所有真因子(除开数 n 身的所有因子)的和，如果 d(a)=b 且 d(b)=a，其
//        中 a≠b，那么 a 与 b 便为亲和数对，其中的每个数称为亲和数。
//        例如：
//        220 的真因子为 1, 2, 4, 5, 10, 11, 20, 22, 44, 55，110，所以 d(220)=284
//        284 的真因子为 1,2, 4, 71、142，所以 d(284)=220，因此 220、284 为亲和数。
//        求 10000 以下所有亲和数的和。
//        答案：31626

public class Week021 {
    public static int tureFactorSum(int num) {
        if (num <= 1) return 0;
        int ans = 1;
        int factor = 2, k;
        while (factor * factor < num) {
            k = num / factor;
            if (num == k * factor) ans += factor + k;
            ++factor;
        }
        if (factor * factor == num) ans += factor;
        return ans;
    }

    static void run() {
        int n = 10000;
        int ans = 0;
        for (int cur = 2; cur < n; ++cur) {
            int t = tureFactorSum(cur);
            if (t != cur && tureFactorSum(t) == cur) {
                ans += cur;
            }
        }
        System.out.println(ans);
    }

    public static void main(String[] args) {
        long startTime = System.nanoTime();
        run();
        System.out.println("\n程序运行时间：" + (System.nanoTime() - startTime) + "ns.");

    }
}
